package com.young.launch_task_init.core.task.base

import android.app.Application
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers

/**
 * Author：young
 * .
 * Time： 31/3/2023 上午9:55 周五
 * .
 * Desc：初始化任务接口
 */
interface ITask {

    /**
     * 获取任务名称
     */
    fun getName(): String

    /**
     * 初始化任务执行
     * @param application 应用程序上下文
     */
    fun doTask(application: Application)

    /**
     * 初始化是否已完成
     */
    fun isComplete(): Boolean

    /**
     * 获取协程调度器
     *
     * @return
     *  [Dispatchers.IO] : 在 IO 线程执行任务
     *  [Dispatchers.Default] : 在 CPU 密集型线程执行任务
     *  [Dispatchers.Unconfined] : 在当前调用线程开启协程，当前是什么线程，开启起来就是在什么线程执行，比较少用
     *  [Dispatchers.Main] : 在 主线程 UI 线程执行任务
     */
    fun getCoroutineDispatcher(): CoroutineDispatcher
}